package com.aviccxzx.smarthome.service;


import com.aviccxzx.smarthome.entity.BindSucBean;
import com.aviccxzx.smarthome.entity.CamBound;
import com.aviccxzx.smarthome.entity.CamExit;
import com.aviccxzx.smarthome.entity.CamListBean;
import com.aviccxzx.smarthome.entity.CamMsgBean;
import com.aviccxzx.smarthome.entity.CamShareRecordBean;
import com.aviccxzx.smarthome.entity.DeleteDevMove;
import com.aviccxzx.smarthome.entity.DeviceWorkBean;
import com.aviccxzx.smarthome.entity.DoorMsg;
import com.aviccxzx.smarthome.entity.FeedBack;
import com.aviccxzx.smarthome.entity.GetMoveInfoBean;
import com.aviccxzx.smarthome.entity.GetMoveList;
import com.aviccxzx.smarthome.entity.GetSceneBean;
import com.aviccxzx.smarthome.entity.GetSceneTime;
import com.aviccxzx.smarthome.entity.MsgStateBean;
import com.aviccxzx.smarthome.entity.NewApkBean;
import com.aviccxzx.smarthome.entity.SaveSceneBean;
import com.aviccxzx.smarthome.entity.UserInfo;
import com.aviccxzx.smarthome.entity.VideoStatus;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.HTTP;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Query;
import retrofit2.http.Url;

/**
 * Created by win764-1 on 2016/12/12.
 */

public interface RetrofitService {
    //网关业务

    /**
     * 意见反馈
     */
    @POST("addFeedback")
    Call<FeedBack> addFeedBack(@Query("uid") String uid,
                               @Query("content") String content,
                               @Query("phone") String phone);

    /**
     * 同步网关信息
     */
    @POST("login")
    Call<FeedBack> login(@Body RequestBody route);

    /**
     * 上传头像
     */
    @Multipart
    @POST("uploadImage")
    Call<ResponseBody> uploadImage(@Query("uid") String uid,
                                   @Part MultipartBody.Part file);

    /**
     * 获取用户头像
     */
    @GET("getImage")
    Call<ResponseBody> getImage();

    /**
     * 用户信息修改
     */
    @POST("update")
    Call<FeedBack> update(
                          @Query("userName") String userName,
                          @Query("region") String region,
                          @Query("city") String city,
                          @Query("phone") String phone);

    /**
     * 获取用户信息
     */
    @GET("getinfo")
    Call<UserInfo> getinfo(@Query("uid") String uid);

    /**
     * 获取消息历史
     */
    @GET("getDataHistory")
    Call<DoorMsg> getDataHistory(@Query("mac") String mac);

    /**
     * 通过wifi绑定gprs功能
     */
    @POST("bindsucess")
    Call<BindSucBean> bindsucess(@Body RequestBody route);

    /**
     * 用户编辑电子围栏
     */
    @POST("setElectronicFence")
    Call<FeedBack> setElectronicFence(@Body RequestBody route);

    /**
     * 用户定时同步当前位置
     */
    @POST("syncUserLocation")
    Call<ResponseBody> syncUserLocation(@Body RequestBody route,
                                        @Query("longitude") String longitude,
                                        @Query("latitude") String latitude);

    /**
     * 添加摄像头
     */
    @POST("addCamera")
    Call<ResponseBody> addCamera(@Body RequestBody route,
                                 @Query("uid") String uid);

    /**
     * 获取摄像头列表
     */
    @GET("getCameras")
    Call<ResponseBody> getCameras(@Query("mac") String mac);

    /**
     * 获取子设备消息短信开关
     */
    @GET("getDeviceSwitchList")
    Call<MsgStateBean> getDeviceSwitchList();

    /**
     * 获取子设备消息推送开关
     */
    @GET("getMessage/history")
    Call<ResponseBody> getMessage(@Query("uid") String uid);

    /**
     * 获取子设备撤防开关（包括中控的）
     */
    @GET("getDisarmSwitchList")
    Call<DeviceWorkBean> getDisarmSwitchList(@Query("mac") String mac);
    /**
     * 获取子设备撤防开关（么有中控的）
     */
    @GET("getDisarmSwitchChildList")
    Call<DeviceWorkBean> getDisarmSwitchChildList(@Query("macs") String macs);

    /**
     * 控制单个子设备短信开关
     */
    @PUT("controlDeviceSwitch")
    Call<FeedBack> controlDeviceSwitch(@Query("mac") String mac,
                                       @Query("messageSwitch") int messageSwitch);

    /**
     * 管理员解绑网关时删除关联的场景 PUT /unbind/scene
     */
    @PUT("unbind/scene")
    Call<SaveSceneBean> unbindScene(@Body RequestBody route);
    /**
     * 管理员解绑网关时删除接口
     */
    @PUT("unbund")
    Call<FeedBack> unbund(@Body RequestBody route);

    /** 管理员解绑子设备时删除接口
     */
    @DELETE("unbund/childDevice")
    Call<DeleteDevMove> unbundSub(@Query("mac") String mac, @Query("admin") int admin);

    /**
     * 设置子设备撤防开关
     */
    @PUT("deviceDisarmSwitch")
    Call<FeedBack> deviceDisarmSwitch(@Query("mac") String mac,
                                      @Query("parentMac") String parentMac, @Query("disarmSwitch") int disarmSwitch);
    /**
     * 设置子设备撤防
     */
    @PUT("disarmAllSwitch")
    Call<FeedBack> disarmAllSwitch(@Query("macs") String mac, @Query("disarmSwitch") int disarmSwitch);
    /**
     * 设置一键关闭短信开关
     */
    @PUT("setDevicesSwitch")
    Call<FeedBack> setDevicesSwitch(@Query("messageSwitch") int messageSwitch);


    //网关业务-------------------------------------------------------

    //场景定时-------------------------------------------------------

    /**
     * 添加场景
     */
   /* @POST("addScene")
    Call<ResponseBody> addScene(@Body RequestBody route,
                                @Query("scene_name") String scene_name,
                                @Query("scene_model") int scene_model);*/

    /**
     * 添加场景
     */
    @POST("saveScene")
    Call<SaveSceneBean> saveScene(@Body RequestBody route);

    /**
     * 添加联动
     */
    @POST("addSceneLogic")
    Call<ResponseBody> addSceneLogic(@Body RequestBody route);

    /**
     * 修改联动
     */
    @PUT("editSceneLogic")
    Call<ResponseBody> editSceneLogic(@Body RequestBody route);

    /**
     * 新增定时任务
     */
    @POST("addTimeScene")
    Call<ResponseBody> addTimeScene(@Body RequestBody route);

    /**
     * 删除场景
     */
    @HTTP(method = "DELETE", path = "/gateway/deleteScene", hasBody = true)
    Call<ResponseBody> deleteScene(@Body RequestBody route,
                                   @Query("id") String id);

    /**
     * 删除联动
     */
    @HTTP(method = "DELETE", path = "/gateway/deleteSceneLogic", hasBody = true)
    Call<ResponseBody> deleteSceneLogic(@Body RequestBody route,
                                        @Query("id") String id);


    /**
     * 删除定时任务
     */
    @DELETE("deleteTimeScene")
    Call<ResponseBody> deleteTimeScene(@Body RequestBody route);

    /**
     * 删除子设备相关的联动
     */
    @DELETE("deleteChildDevive")
    Call<DeleteDevMove> deleteChildDevive(@Query("mac") String mac);

    /**
     * 获取场景列表
     */
    @POST("getSceneList")
    Call<GetSceneBean> getSceneList(@Body RequestBody route);

    /**
     * 获取联动集合
     */
    @POST("getSceneLogicList")
    Call<GetMoveList> getSceneLogicList(@Query("id") String id,
                                        @Query("uid") String uid);

    /**
     * 修改场景模式
     */
    @PUT("setSceneModel")
    Call<FeedBack> setSceneModel(@Body RequestBody route,
                                     @Query("scene_id") String scene_id,
                                     @Query("scene_model") String scene_model);

    /**
     * 设置场景开关 PUT /setSceneSwitch
     */
    @PUT("setSceneSwitch")
    Call<ResponseBody> setSceneSwitch(@Query("id") String id,
                                      @Query("scene_switch") int scene_switch);

    /**
     * 获取场景信息
     */
    @POST("getSceneInfo")
    Call<GetSceneTime> getSceneInfo(@Body RequestBody route,
                                    @Query("scene_id") String scene_id);

    /**
     * 获取某个联动的详情信息
     */
    @GET("getSceneLogicInfo")
    Call<GetMoveInfoBean> getSceneLogicInfo(@Query("id") String id,
                                            @Query("uid") String uid);


    //摄像头-------------------------------------------------------

    /**
     * 获取摄像头状态信息
     */
    @POST()
    Call<VideoStatus> GetDevStatus(@Url String url);

    /**
     * 获取摄像头状态信息
     */
    @POST()
    Call<CamExit> CheckDevExist(@Url String url);

    /**
     * 查询摄像头是否已被绑定
     */
    @GET("camera/hasBind")
    Call<CamBound> camisBound(@Query("yst") String yst);

    /**
     * 绑定摄像头
     */
    @PUT("camera/firstBind")
    Call<ResponseBody> bindCam(@Query("yst") String yst,
                               @Query("user_name") String user_name, @Query("user_pwd") String user_pwd, @Query("phone_id") String phone_id, @Query("configure") int version);

    /**
     * 获取摄像头列表
     */
    @GET("camera/getList")
    Call<CamListBean> getCamlist();

    /**
     * 修改摄像头信息
     */
    @POST("camera/save")
    Call<FeedBack> changeCaminfo(@Query("yst") String yst,
                                     @Query("user_name") String user_name,
                                 @Query("user_pwd") String user_pwd,@Query("type") String type,
                                 @Query("version") String version,@Query("sdcard") String sdcard,
                                 @Query("online") String online,@Query("configure") String configure);

    /**
     * 解绑摄像头
     */
    @GET("camera/unBind")
    Call<ResponseBody> unBindCam(@Query("yst") String yst);

    /**
     * 分享绑定摄像头
     */
    @PUT("camera/shareBind")
    Call<ResponseBody> shareBindCam(@Query("yst") String yst, @Query("phone_id") String phone_id);

    /**
     * 获得摄像头分享记录
     */
    @GET("camera/getShareUsers")
    Call<CamShareRecordBean> getCamshare(@Query("yst") String yst);

    /**
     * 删除摄像头分享记录
     */
    @DELETE("camera/delShareUser")
    Call<ResponseBody> deleteShareCam(@Query("yst") String yst, @Query("uid") String uid);

    /**
     * 获得摄像头报警记录
     */
    @GET("camera/getHistory")
    Call<CamMsgBean> getCamHistory(@Query("yst") String yst);
    //apk更新-----------------------------------------------

    /**
     * 获得摄像头报警记录
     */
    @GET("newestPack")
    Call<NewApkBean> newestPack();

}
